iT邦幫忙

2023 iThome 鐵人賽

DAY 22
0

前言

前面幾天不時有提到,如果可以降低程式碼耦合的程度,可以使程式碼更靈活。
當兩個模組的關聯性越來越高的話,那耦合的程度就越高。
這篇裡面提到使用介面是一種降低程式碼耦合度的有效方式之一,降低耦合度是軟體設計中的重要原則之一,它有助於使程式碼更加靈活、易於維護和擴展。


介面(Interface)是面向物件程式設計中的重要概念之一,用於定義一個類別或結構必須實作的合約。

介面是什麼?

在程式設計中,介面是一種合約或契約,用於定義類別或結構應該提供的方法、屬性和事件。它僅定義了成員的簽名,而不提供任何實際的實作。介面充當了一個標準,告訴類別或結構它們必須提供哪些功能。

介面的特點:

  1. 定義合約:介面定義了一個合約,表示實作它的類別或結構必須提供特定的功能。
  2. 無實作:介面不包含任何實際的程式碼,只有成員的簽名。實際的實作由實作介面的類別或結構提供。
  3. 多重繼承:一個類別或結構可以實作多個介面。這使得多個介面可以被結合在一個類別或結構中,從而實現多重繼承的效果。
  4. 提供規範:介面提供了一個規範或標準,讓多個類別或結構能夠一致地使用相同的方法名稱和簽名。

為什麼使用介面?

  1. 實現多重繼承:C#不支援多重繼承,但介面允許一個類別實作多個介面,從而實現多重繼承的效果。
  2. 定義合約:介面定義了一個類別或結構必須提供的功能,這有助於更好地組織程式碼和減少錯誤。
  3. 實現多態性:介面提供了多態性的基礎,允許不同的類別實作相同的介面,並以不同的方式執行相同的方法。
using System;

// 定義介面
interface IShape
{
    double GetArea();
    double GetPerimeter();
}

// 實作介面的類別:矩形
class Rectangle : IShape
{
    public double Width { get; set; }
    public double Height { get; set; }

    public Rectangle(double width, double height)
    {
        Width = width;
        Height = height;
    }

    public double GetArea()
    {
        return Width * Height;
    }

    public double GetPerimeter()
    {
        return 2 * (Width + Height);
    }
}

// 實作介面的類別:圓形
class Circle : IShape
{
    public double Radius { get; set; }

    public Circle(double radius)
    {
        Radius = radius;
    }

    public double GetArea()
    {
        return Math.PI * Radius * Radius;
    }

    public double GetPerimeter()
    {
        return 2 * Math.PI * Radius;
    }
}

class Program
{
    static void Main()
    {
        // 創建矩形實例
        IShape rectangle = new Rectangle(5, 4);
        Console.WriteLine("Rectangle Area: " + rectangle.GetArea());
        Console.WriteLine("Rectangle Perimeter: " + rectangle.GetPerimeter());

        // 創建圓形實例
        IShape circle = new Circle(3);
        Console.WriteLine("Circle Area: " + circle.GetArea());
        Console.WriteLine("Circle Circumference: " + circle.GetPerimeter());
    }
}

在這個範例中,先定義了一個名為**IShape的介面,並要求實作兩個方法:GetAreaGetPerimeter,這代表形狀必須提供計算面積和周長的功能。
然後再來創建了兩個不同的實作類別名稱:
RectangleCircle,分別表示矩形和圓形,並且去實作了IShape**介面。

在**Main**方法中,我們創建了介面實例,並使用這些介面實例來計算不同形狀的面積和周長。這個範例展示了介面在不同類型之間提供一致的功能契約,並且允許多形狀使用相同的方法名稱來計算其特定的屬性。


第22天 挑戰結束!!!!


上一篇
Day 21 ASP.NET Core基本概念
下一篇
Day 23 API RESTful API 是啥?
系列文
30天開啟.NET後端工程師的旅程30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言